package com.kumarn.android.imagesave.full;

import java.io.File;
import java.util.ArrayList;
import java.util.List;


import com.kumarn.android.imagesave.full.db.DBOpenHelper;
import com.kumarn.android.imagesave.full.manager.DirectoryManager;
import com.kumarn.android.imagesave.full.manager.ImageManager;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.text.InputFilter;
import android.text.InputType;
import android.text.SpannableString;
import android.text.format.DateFormat;
import android.text.style.UnderlineSpan;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

/**
 * グッズ新規登録Activity
 *
 * @author kuma
 *
 */
public class GoodsAddActivity extends Activity {

	private static final int REQUEST_GALLERY = 0;
	private static final int REQUEST_CAMERA = 1;
	private static final int REQUEST_CROP_PICK = 2;

	private static final int TRIMMING_X = 500; // トリミング幅(px)
	private static final int TRIMMING_Y = 375; // トリミング高(px)
	private static final int ASPECT_X = 4; // アスペクト比X(px)
	private static final int ASPECT_Y = 3; // アスペクト比Y(px)

	private boolean CAMERA_CHOICE; // カメラ選択判定用
	private Uri beforeImageUri; // トリミング前画像Uri
	private Uri afterImageUri; // トリミング後画像Uri

	public String photoName; //画像ファイル名

	private SharedPreferences sp; //プリファレンス

	private ImageView image; // グッズイメージ
	private TextView nameText; // グッズ名テキスト
	private TextView memoText; // メモテキスト
	private TextView urlText; // URLテキスト
	private TextView groupText; // URLテキスト

	private List<Integer> groupIdList;
	private int addGroup;

	private String method;		//Intent 取得コード
	private int method_id;		//編集対象ID

	private boolean editFlag;		//編集フラグ


	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.goods_add);

		//編集フラグをfalseにする
		editFlag = false;

		// グッズイメージ
		image = (ImageView) findViewById(R.id.new_goods_thumbnail);
		image.setOnClickListener(image_OnClickListener);

		// グッズイメージ編集ボタン
		ImageView imageEditButton = (ImageView) findViewById(R.id.imageEditButton);
		imageEditButton.setOnClickListener(imageEditButton_OnClickListener);

		// グッズ名テキスト
		nameText = (TextView) findViewById(R.id.nameTextView);

		// グッズ名編集ボタン
		ImageView nameEditButton = (ImageView) findViewById(R.id.nameEditButton);
		nameEditButton.setOnClickListener(nameEditButton_OnClickListener);

		// メモテキスト
		memoText = (TextView) findViewById(R.id.memoTextView);

		// メモ編集ボタン
		ImageView memoEditButton = (ImageView) findViewById(R.id.memoEditButton);
		memoEditButton.setOnClickListener(memoEditButton_OnClickListener);

		// URLテキスト
		urlText = (TextView) findViewById(R.id.urlTextView);

		// URL編集ボタン
		ImageView urlEditButton = (ImageView) findViewById(R.id.urlEditButton);
		urlEditButton.setOnClickListener(urlEditButton_OnClickListener);

		//グループテキスト
		groupText = (TextView) findViewById(R.id.groupTextView);

		// グループボタン
		ImageView groupChoiceButton = (ImageView) findViewById(R.id.groupChoiceButton);
		groupChoiceButton.setOnClickListener(groupChoiceButton_OnClickListener);

		//登録ボタン
		TextView addButton = (TextView) findViewById(R.id.goods_add_button);
		addButton.setOnClickListener(addButton_OnClickListener);

		//キャンセルボタン
		TextView cancelButton = (TextView) findViewById(R.id.goods_cancel_button);
		cancelButton.setOnClickListener(cancelButton_OnClickListener);

		//Intentからコードを取得
		Intent i = getIntent();
		method = i.getStringExtra("METHOD");

		//既存データ編集の場合
		if(method.equals("edit")){
			//データID(グッズID)を取得
			method_id = i.getIntExtra("ID", -1);
			if(method_id != -1){

				//ボタンを編集ボタンにする
				addButton.setText("更新");

				//DB接続
				DBOpenHelper dbHelper = new DBOpenHelper(this);
				SQLiteDatabase db = dbHelper.getWritableDatabase();

				//グッズ詳細を取得
				String SELECT_T_CONTENT = "SELECT goods_id,goods_name,goods_memo, goods_image,goods_url,goods_group,goods_group_name "
																	+ "FROM t_goods LEFT JOIN t_goods_group ON goods_group = goods_group_id WHERE goods_id =" + method_id;
				Cursor cursol = db.rawQuery(SELECT_T_CONTENT, null);
				cursol.moveToFirst();

				//各種情報を取得し、Textにセット
				nameText.setText(cursol.getString(1));		//グッズ名
				memoText.setText(cursol.getString(2));		//グッスメモ
				photoName = cursol.getString(3).replaceAll(".jpg","");		//画像ファイル名(".jpg"を除く)
				String urlStr = cursol.getString(4);		//URL

				//URLがhttpで始まる文字列の場合
				if(urlStr.length() > 4 && urlStr.substring(0, 4).equals("http")){
					//アンダーバーを設定
					SpannableString spannableString = new SpannableString(urlStr);
					spannableString.setSpan(new UnderlineSpan(), 0, spannableString.length(), 0);
					urlText.setText(spannableString);
					//文字色をブルーにする
					urlText.setTextColor(Color.rgb(00,204,255));
					//オンクリックブラウザ起動設定
					urlText.setOnClickListener(url_OnClickListener);

				//http以外で始まる場合
				}else{
					urlText.setText(urlStr);
					//文字色を白にする
					urlText.setTextColor(Color.BLACK);
					//リスナー解除
					urlText.setOnClickListener(null);
				}

				//グループID保持
				addGroup = cursol.getInt(5);
				groupText.setText(cursol.getString(6));		//グループ名

				//DBクローズ
				cursol.close();
				db.close();

				Bitmap bmp = null;
				//画像ファイル存在確認
				String filepath = (new DirectoryManager()).getImageDir().getPath() + "/" + photoName + ".jpg";
				File file = new File(filepath);
				//ファイルがあれば取得
				if(file.exists()){
					//画像保存PathからBitmap取得
					bmp = BitmapFactory.decodeFile(filepath);
				//無ければnoImage画像をセット
				}else{
					Resources res = this.getResources();
					bmp = BitmapFactory.decodeResource(res, R.drawable.noimage);
				}
				//ビューにセット
				image.setImageBitmap(bmp);

			}

		//既存データ編集以外の場合は新規登録として扱う
		}else{
			method = "add";
			//ボタンを登録ボタンにする
			addButton.setText("登録");
		}

	}

	// グッズ名編集ボタン
	OnClickListener nameEditButton_OnClickListener = new OnClickListener() {
		public void onClick(View v) {

			//EditText生成
			final EditText nameEdit = new EditText(GoodsAddActivity.this);
			nameEdit.setText(nameText.getText());
			nameEdit.setMaxLines(1);
			nameEdit.setInputType(InputType.TYPE_CLASS_TEXT); //改行禁止

			//ダイアログ生成
			final AlertDialog alertDialog = new AlertDialog.Builder(GoodsAddActivity.this)
				.setTitle("Name")
				.setView(nameEdit)
				.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						//編集フラグをtrueにする
						editFlag = true;
						//編集内容を反映する
						nameText.setText(nameEdit.getText().toString());
					}
				})
				.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						//何もしない
					}
				}).create();

			//キーボード自動表示
			nameEdit.setOnFocusChangeListener(new OnFocusChangeListener() {
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            }
        }});

			//ダイアログ表示
			alertDialog.show();
		}
	};

	// メモ編集ボタン
	OnClickListener memoEditButton_OnClickListener = new OnClickListener() {
		public void onClick(View v) {

			//EditText生成
			final EditText memoEdit = new EditText(GoodsAddActivity.this);
			memoEdit.setText(memoText.getText());
			memoEdit.setLines(4);

			//ダイアログ生成
			final AlertDialog alertDialog = new AlertDialog.Builder(GoodsAddActivity.this)
				.setTitle("Memo")
				.setView(memoEdit)
				.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						//編集フラグをtrueにする
						editFlag = true;
						//編集内容を反映
						memoText.setText(memoEdit.getText().toString());
					}
				})
				.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						//何もしない
					}
				}).create();

			//キーボード自動表示
			memoEdit.setOnFocusChangeListener(new OnFocusChangeListener() {
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            }
        }});

			//ダイアログ表示
			alertDialog.show();
		}
	};

	//URL編集ボタン
	OnClickListener urlEditButton_OnClickListener = new OnClickListener() {
		public void onClick(View v) {

			//EditText生成
			final EditText urlEdit = new EditText(GoodsAddActivity.this);
			urlEdit.setText(urlText.getText());
			urlEdit.setInputType(InputType.TYPE_CLASS_TEXT); //改行禁止

			//ダイアログ生成
			final AlertDialog alertDialog = new AlertDialog.Builder(GoodsAddActivity.this)
				.setTitle("URL")
				.setView(urlEdit)
				.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						//編集フラグをtrueにする
						editFlag = true;
						//入力されたURLを取得
						String urlStr = urlEdit.getText().toString();

						//URLがhttpで始まる文字列の場合
						if(urlStr.length() > 4 && urlStr.substring(0, 4).equals("http")){
							//アンダーバーを設定
							SpannableString spannableString = new SpannableString(urlStr);
							spannableString.setSpan(new UnderlineSpan(), 0, spannableString.length(), 0);
							urlText.setText(spannableString);
							//文字色をブルーにする
							urlText.setTextColor(Color.rgb(00,204,255));
							//オンクリックブラウザ起動設定
							urlText.setOnClickListener(url_OnClickListener);

						//http以外で始まる場合
						}else{
							urlText.setText(urlStr);
							//文字色を白にする
							urlText.setTextColor(Color.BLACK);
							//リスナー解除
							urlText.setOnClickListener(null);
						}
					}
				})
				.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						//何もしない
					}
				}).create();

			//キーボード自動表示
			urlEdit.setOnFocusChangeListener(new OnFocusChangeListener() {
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            }
        }});

			//ダイアログ表示
			alertDialog.show();
		}
	};

	//グループ編集ボタン
	OnClickListener groupChoiceButton_OnClickListener = new OnClickListener() {
		public void onClick(View v) {


			//グループ選択一欄リスト
			List<String> listItems = new ArrayList<String>();
			groupIdList = new ArrayList<Integer>();

			//リストの最初に新規登録を追加する
			listItems.add("＋新規追加");
			groupIdList.add(-1);		//IDは-1を設定

			//DB接続
			DBOpenHelper dbHelper = new DBOpenHelper(GoodsAddActivity.this);
			SQLiteDatabase db = dbHelper.getWritableDatabase();
			Cursor cursol = null;

			//グッズグループ全件取得
			String selectAll = "SELECT goods_group_id,goods_group_name FROM t_goods_group ORDER BY goods_group_id";
			cursol = db.rawQuery(selectAll, null);

			//DBから取得したグッズグループをリストにセット
			while (cursol.moveToNext()) {
				listItems.add(cursol.getString(1));
				groupIdList.add(cursol.getInt(0));		//リスト選択後に取得するためのグッズIDを別にリストで保持
			}

			//DBクローズ
			cursol.close();
			db.close();

			//グッズグループリストをCharSequence配列に変換
			final CharSequence[] charSequenceItems = listItems.toArray(new CharSequence[listItems.size()]);

			//ダイアログ起動
			new AlertDialog.Builder(GoodsAddActivity.this)
				.setTitle("Group")
				.setItems(charSequenceItems, new DialogInterface.OnClickListener() {
			    public void onClick(DialogInterface dialog, int item) {
						//編集フラグをtrueにする
			    	editFlag = true;

			    	//新規登録選択時
			    	if(item == 0){

			    		//グループ名入力Edit生成
			    		final EditText newGroupEdit = new EditText(GoodsAddActivity.this);
			    		newGroupEdit.setMaxLines(1);
			    		newGroupEdit.setInputType(InputType.TYPE_CLASS_TEXT); //改行禁止
			    		newGroupEdit.setHint("最大15文字");

			    		//グループ名文字数入力制限
			    		InputFilter[] _inputFilter = new InputFilter[1];
			    		_inputFilter[0] = new InputFilter.LengthFilter(15);
			    		newGroupEdit.setFilters(_inputFilter);

			    		//ダイアログ起動
			  			final AlertDialog alertDialog = new AlertDialog.Builder(GoodsAddActivity.this)
			  				.setTitle("NewGroup")
			  				.setView(newGroupEdit)
			  				.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
			  					public void onClick(DialogInterface dialog, int whichButton) {
			  						//DB接続
			  						DBOpenHelper dbHelper = new DBOpenHelper(GoodsAddActivity.this);
			  						SQLiteDatabase db = dbHelper.getWritableDatabase();

			  						//新しいグループを登録
			  						db.execSQL("INSERT INTO t_goods_group(goods_group_name) values('" + newGroupEdit.getText().toString() + "');");

			  						//自動生成されたIDを取得
			  						Cursor cursol = db.rawQuery("SELECT seq FROM sqlite_sequence WHERE name = 't_goods_group'", null);
			  						cursol.moveToFirst();
			  						addGroup = cursol.getInt(0);

			  						//グループ名を表示
			  						groupText.setText(newGroupEdit.getText().toString());

			  						//DBクローズ
			  						cursol.close();
			  						db.close();
			  					}
			  				})
			  				.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
			  					public void onClick(DialogInterface dialog, int whichButton) {
			  						//何もしない
			  					}
			  				}).create();

			  			//キーボード自動表示
			  			newGroupEdit.setOnFocusChangeListener(new OnFocusChangeListener() {
			          public void onFocusChange(View v, boolean hasFocus) {
			              if (hasFocus) {
			                  alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
			              }
			          }});

			  			//ダイアログ表示
			  			alertDialog.show();

			    	//既存グループ選択時
			    	}else{
			    		//ID保持
				    	addGroup = groupIdList.get(item);
				    	//グループ名を表示
				    	groupText.setText(charSequenceItems[item].toString());
			    	}
			    }
			}).show();
		}
	};

	/**
	 * 登録ボタン
	 */
	OnClickListener addButton_OnClickListener = new OnClickListener() {
		public void onClick(View v) {

			//DB接続
			DBOpenHelper dbHelper = new DBOpenHelper(GoodsAddActivity.this);
			SQLiteDatabase db = dbHelper.getWritableDatabase();

			//各種編集データ取得
			String addName = nameText.getText().toString();
			String addMemo = memoText.getText().toString();
			String addUrl = urlText.getText().toString();

			try{
				//新規登録の場合
				if(method.equals("add")){
					//INSERT
					db.execSQL("INSERT INTO t_goods(goods_name,goods_date,goods_image,goods_memo,goods_url,goods_group) values('"
							+ addName + "',"
							+ System.currentTimeMillis() + ",'"
							+ photoName + ".jpg','"
							+ addMemo + "','"
							+ addUrl + "',"
							+ addGroup + ");");
				//既存データ編集の場合
				}else if(method.equals("edit")){
					//UPDATE
					db.execSQL("UPDATE t_goods SET "
							+ "goods_name ='" +addName+"',"
							+ "goods_date ="+System.currentTimeMillis()+","
							+ "goods_image = '"+photoName + ".jpg',"
							+ "goods_memo = '" +addMemo+ "',"
							+ "goods_url = '" +addUrl+ "',"
							+ "goods_group = " +addGroup
							+ " WHERE goods_id =" +method_id);

				}

			}catch (SQLException e) {
				Toast.makeText(GoodsAddActivity.this, "登録に失敗しました", Toast.LENGTH_SHORT).show();
			}

			//DBクローズ
			db.close();
			//Activity終了
			finish();
		}
	};

	/**
	 * キャンセルボタン
	 */
	OnClickListener cancelButton_OnClickListener = new OnClickListener() {
		public void onClick(View v) {
			if(editFlag){
				new AlertDialog.Builder(GoodsAddActivity.this)
				.setTitle("画像選択")
				.setMessage("編集内容を破棄しますか？")
				.setPositiveButton("破棄", new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						if(afterImageUri != null){
							ContentResolver contentResolver = getContentResolver();
							try {
								contentResolver.delete(afterImageUri, null, null);
							} catch (Exception e) {
							}
						}
						dialog.cancel();
						finish();
					}
				})
				.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {

					}
				}).show();
			}else{
				finish();
			}
		}
	};

	/**
	 * ハードキー検出
	 */
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode != KeyEvent.KEYCODE_BACK) {
			return super.onKeyDown(keyCode, event);
			// バックキーの場合
		} else {
			if(editFlag){
				new AlertDialog.Builder(GoodsAddActivity.this)
				.setTitle("画像選択")
				.setMessage("編集内容を破棄しますか？")
				.setPositiveButton("破棄", new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {
						if(afterImageUri != null){
							ContentResolver contentResolver = getContentResolver();
							try {
								contentResolver.delete(afterImageUri, null, null);
							} catch (Exception e) {
							}
						}
						dialog.cancel();
						finish();
					}
				})
				.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int whichButton) {

					}
				}).show();
			}else{
				finish();
			}
			return false;
		}
	}

	/**
	 * URLブラウザ起動
	 */
	OnClickListener url_OnClickListener = new OnClickListener() {
		public void onClick(View v) {
			Uri uri = Uri.parse(urlText.getText().toString());
			Intent i = new Intent(Intent.ACTION_VIEW,uri);
			startActivity(i);
		}
	};

	/**
	 * 画像クリック時
	 * 拡大縮小可能なビューで表示する
	 */
	OnClickListener image_OnClickListener = new OnClickListener() {
		public void onClick(View v) {
			Intent intent = new Intent(GoodsAddActivity.this,GoodsScaleImageActivity.class);
			intent.putExtra("img", photoName);
			intent.putExtra("title", nameText.getText().toString());
			startActivity(intent);
		}
	};

	/**
	 * 画像選択ダイアログ表示
	 */
	OnClickListener imageEditButton_OnClickListener = new OnClickListener() {
		public void onClick(View v) {
			final CharSequence[] items = { "ギャラリーから選択", "カメラ起動" };

			new AlertDialog.Builder(GoodsAddActivity.this)
				.setTitle("画像選択")
				.setItems(items, new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int item) {

					// ギャラリー選択時
					if (item == 0) {
						// ギャラリーアプリ起動
						Intent intent = new Intent();
						intent.setType("image/*");
						intent.setAction(Intent.ACTION_GET_CONTENT);
						startActivityForResult(intent, REQUEST_GALLERY);

						// カメラ選択時
					} else if (item == 1) {

						/**
						 * カメラ撮影画像を撮影後にそのままBitmapで取得すると画質が悪いため、
						 * 撮影した画像を一度外部ストレージに保存しトリミングの際は保存先Uriから 画像を読み込むようにする
						 **/

						// ファイル名
						long dateTaken = System.currentTimeMillis();
						String photoName = DateFormat.format("yyyy-MM-dd_kk.mm.ss", dateTaken).toString() + ".jpg";

						// ファイルパス
						DirectoryManager dm = new DirectoryManager();
						String photoPath = dm.getTmpDir() + photoName;

						// 撮影後の保存設定を行い、カメラアプリを起動
						ContentResolver contentResolver = getContentResolver();
						ContentValues values = new ContentValues(6);
						values.put(Images.Media.MIME_TYPE, "image/jpeg");
						values.put(Images.Media.DATE_MODIFIED, System.currentTimeMillis() / 1000);
						values.put(Images.Media.TITLE, photoName);
						values.put(Images.Media.DISPLAY_NAME, photoName);
						values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis());
						values.put(MediaStore.Images.Media.DATA, photoPath);
						Uri pictureUri = contentResolver.insert(Images.Media.EXTERNAL_CONTENT_URI, values);

						if (sp == null) {
							sp = getPreferences(MODE_PRIVATE);
						}
						Editor editor = sp.edit();
						editor.putString("pictureUri", pictureUri.toString());
						editor.commit();

						Intent intent = new Intent();
						intent.setAction("android.media.action.IMAGE_CAPTURE");
						intent.putExtra(MediaStore.EXTRA_OUTPUT, pictureUri);
						startActivityForResult(intent, REQUEST_CAMERA);

					}
					dialog.cancel();
				}
			}).show();
		}
	};

	/**
	 * 画像選択後回帰時
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		try {
			// 画像選択からの回帰時
			if ((requestCode == REQUEST_GALLERY || requestCode == REQUEST_CAMERA) && resultCode == RESULT_OK) {
				CAMERA_CHOICE = false;

				// ギャラリーの場合
				if (requestCode == REQUEST_GALLERY) {
					// Intentよりトリミング前画像Uriを取得する
					beforeImageUri = data.getData();

					// カメラの場合
				} else if (requestCode == REQUEST_CAMERA) {
					if (sp == null) {
						sp = getPreferences(MODE_PRIVATE);
					}
					if (data != null && data.getData() != null) {
						beforeImageUri = data.getData();
					} else {
						beforeImageUri = Uri.parse(sp.getString("pictureUri", ""));
					}
					CAMERA_CHOICE = true;

				}

				// Uriより画像を読み込み、トリミングアプリを起動
				Intent intent = new Intent("com.android.camera.action.CROP");
				intent.setData(beforeImageUri);
				intent.putExtra("outputX", TRIMMING_X);
				intent.putExtra("outputY", TRIMMING_Y);
				intent.putExtra("aspectX", ASPECT_X);
				intent.putExtra("aspectY", ASPECT_Y);
				intent.putExtra("scale", true);
				intent.putExtra("return-data", true);
				startActivityForResult(intent, REQUEST_CROP_PICK);

			// トリミングからの回帰時
			} else if (requestCode == REQUEST_CROP_PICK && resultCode == RESULT_OK) {

				//編集フラグをtrueにする
				editFlag = true;

				// トリミング後のBitmapを取得し、保存
				Bitmap bitmap = data.getExtras().getParcelable("data");
				ImageManager im = new ImageManager();
				photoName = createName(System.currentTimeMillis());

				// トリミング後の画像Bitmapを取得し、URIをセット
				afterImageUri = im.addImageAsApplication(getContentResolver(), bitmap, photoName);

				// カメラからのトリミングの場合は元画像を削除
				if (CAMERA_CHOICE) {
					ContentResolver contentResolver = getContentResolver();
					contentResolver.delete(beforeImageUri, null, null);
				}

				image.setImageBitmap(bitmap);

				// キャンセル回帰
			} else if (resultCode != RESULT_OK) {
				if (sp == null) {
					sp = getPreferences(MODE_PRIVATE);
				}
				Uri tmpUri = Uri.parse(sp.getString("pictureUri", ""));
				if (tmpUri != null) {
					ContentResolver contentResolver = getContentResolver();
					try {
						contentResolver.delete(tmpUri, null, null);
					} catch (Exception e) {
						// 対象ファイルがない場合エラー
					}
					sp.edit().remove("pictureUri");
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
			Toast.makeText(this, "画像取得に失敗しました", Toast.LENGTH_SHORT).show();
		}

	}

	private static String createName(long dateTaken) {
		return DateFormat.format("yyyy-MM-dd_kk.mm.ss", dateTaken).toString();
	}
}